package gui.funcionario;

import javax.swing.JPanel;
import java.awt.Dimension;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Font;

import javax.swing.JOptionPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

import entidade.Funcionario;

import persistencia.repositorio.RepositorioFuncionario;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class PanelFuncionarioBuscar extends JPanel {

	private JTextField textConsultaNome;
	private JTable tableConsultaNome;
	private JPanel panelBuscar;
	private JPanel panelAbas;
	private JTabbedPane informacoesConsulta;
	private JPanel panelConsultaNome;
	private JButton btnBuscarNome;
	private JPanel panelConsultaCpf;
	private JLabel lblCpf;
	private JTextField textConsultaCpf;
	private JButton btnBuscarCpf;
	private JTable tableConsultaCpf;
	private JButton btnLimparNome;
	private JLabel labelInsiraTexto;
	private JLabel labelInsiraCpf;
	private JButton tnLimparCpf;
	private DefaultTableModel tabela;
	private DefaultTableModel tabelaCpf;
	private int comprimentoRepositorio;

	private ArrayList<Funcionario> listaFuncionario;
	private PanelFuncionarioCadastro panelCadastro;

	public PanelFuncionarioBuscar() {
		setSize(new Dimension(1000, 600));
		setLayout(null);

		panelBuscar = new JPanel();
		panelBuscar.setSize(new Dimension(1000, 600));
		panelBuscar.setBounds(12, 12, 976, 576);
		add(panelBuscar);
		panelBuscar.setLayout(null);

		JLabel lblConsulta = new JLabel("CONSULTA");
		lblConsulta.setHorizontalAlignment(SwingConstants.CENTER);
		lblConsulta.setFont(new Font("Dialog", Font.BOLD, 36));
		lblConsulta.setBounds(12, 12, 952, 85);
		panelBuscar.add(lblConsulta);

		panelAbas = new JPanel();
		panelAbas.setBounds(12, 109, 952, 400);
		panelBuscar.add(panelAbas);
		panelAbas.setLayout(null);

		informacoesConsulta = new JTabbedPane(JTabbedPane.TOP);
		informacoesConsulta.setBounds(12, 12, 928, 364);
		panelAbas.add(informacoesConsulta);

		panelConsultaNome = new JPanel();
		informacoesConsulta.addTab("Consulta por Nome", null,
				panelConsultaNome, null);
		panelConsultaNome.setLayout(null);

		JLabel lblNome = new JLabel("Nome.:");
		lblNome.setFont(new Font("Dialog", Font.BOLD, 15));
		lblNome.setBounds(12, 12, 92, 29);
		panelConsultaNome.add(lblNome);

		textConsultaNome = new JTextField();
		textConsultaNome.setFont(new Font("Dialog", Font.PLAIN, 20));
		textConsultaNome.setColumns(10);
		textConsultaNome.setBounds(89, 12, 822, 29);
		panelConsultaNome.add(textConsultaNome);

		labelInsiraTexto = new JLabel("");
		labelInsiraTexto.setForeground(Color.RED);
		labelInsiraTexto.setFont(new Font("Dialog", Font.BOLD, 16));
		labelInsiraTexto.setBounds(89, 43, 172, 15);
		panelConsultaNome.add(labelInsiraTexto);

		// Defini��o de defaultmodel para preenchimento da tabela de
		// funcionarios
		tabela = new DefaultTableModel();

		tableConsultaNome = new JTable();
		tableConsultaNome.addMouseListener(new MouseAdapter() {
			@Override
			public void mousePressed(MouseEvent e) {

			}
		});
		tableConsultaNome.setModel(new DefaultTableModel(new Object[][] {
				{ null, null, null }, { "", null, null }, { null, null, null },
				{ null, null, null }, { null, null, null },
				{ null, null, null }, { null, null, null },
				{ null, null, null }, { null, null, null },
				{ null, null, null }, { null, null, null },
				{ null, null, null }, { null, null, null }, }, new String[] {
				"Nome", "CPF", "Cargo" }) {
			Class[] columnTypes = new Class[] { String.class, Integer.class,
					String.class };

			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}

			boolean[] columnEditables = new boolean[] { false, false, false };

			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		});
		tableConsultaNome.getColumnModel().getColumn(0).setResizable(false);
		tableConsultaNome.getColumnModel().getColumn(0).setPreferredWidth(381);
		tableConsultaNome.getColumnModel().getColumn(1).setResizable(false);
		tableConsultaNome.getColumnModel().getColumn(1).setPreferredWidth(176);
		tableConsultaNome.getColumnModel().getColumn(2).setResizable(false);
		tableConsultaNome.getColumnModel().getColumn(2).setPreferredWidth(130);
		tableConsultaNome.setFont(new Font("Dialog", Font.PLAIN, 16));
		tableConsultaNome.setBounds(12, 124, 899, 208);
		panelConsultaNome.add(tableConsultaNome);

		BuscaFuncionarioHandler handler = new BuscaFuncionarioHandler();

		btnBuscarNome = new JButton("Buscar");
		btnBuscarNome.addActionListener(handler);
		btnBuscarNome.setBounds(794, 53, 117, 25);
		panelConsultaNome.add(btnBuscarNome);
		tabela = (DefaultTableModel) tableConsultaNome.getModel();

		btnLimparNome = new JButton("Limpar");
		btnLimparNome.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				textConsultaNome.setText("");
				labelInsiraTexto.setText("");
			}
		});

		btnLimparNome.setBounds(665, 53, 117, 25);
		panelConsultaNome.add(btnLimparNome);

		panelConsultaCpf = new JPanel();
		informacoesConsulta.addTab("Consulta por CPF", null, panelConsultaCpf,
				null);
		panelConsultaCpf.setLayout(null);

		lblCpf = new JLabel("CPF.:");
		lblCpf.setFont(new Font("Dialog", Font.BOLD, 15));
		lblCpf.setBounds(12, 12, 92, 29);
		panelConsultaCpf.add(lblCpf);

		textConsultaCpf = new JTextField();
		textConsultaCpf.setFont(new Font("Dialog", Font.PLAIN, 20));
		textConsultaCpf.setColumns(10);
		textConsultaCpf.setBounds(89, 12, 406, 29);
		panelConsultaCpf.add(textConsultaCpf);

		BuscaFuncionarioBuscaHandler handlerBusca = new BuscaFuncionarioBuscaHandler();
		btnBuscarCpf = new JButton("Buscar");
		btnBuscarCpf.addActionListener(handlerBusca);
		btnBuscarCpf.setBounds(378, 53, 117, 25);
		panelConsultaCpf.add(btnBuscarCpf);

		tabelaCpf = new DefaultTableModel();
		tableConsultaCpf = new JTable();
		tableConsultaCpf.setModel(new DefaultTableModel(new Object[][] {
				{ null, null, null }, { null, null, null },
				{ null, null, null }, { null, null, null },
				{ null, null, null }, { null, null, null },
				{ null, null, null }, { null, null, null },
				{ null, null, null }, { null, null, null },
				{ null, null, null }, { null, null, null },
				{ null, null, null }, },
				new String[] { "Nome", "CPF", "Cargo" }) {
			Class[] columnTypes = new Class[] { String.class, Integer.class,
					String.class };

			public Class getColumnClass(int columnIndex) {
				return columnTypes[columnIndex];
			}

			boolean[] columnEditables = new boolean[] { false, true, true };

			public boolean isCellEditable(int row, int column) {
				return columnEditables[column];
			}
		});
		tableConsultaCpf.getColumnModel().getColumn(0).setResizable(false);
		tableConsultaCpf.getColumnModel().getColumn(0).setPreferredWidth(400);
		tableConsultaCpf.getColumnModel().getColumn(1).setPreferredWidth(191);
		tableConsultaCpf.getColumnModel().getColumn(2).setPreferredWidth(98);
		tableConsultaCpf.setBounds(12, 124, 899, 208);
		panelConsultaCpf.add(tableConsultaCpf);

		tabelaCpf = (DefaultTableModel) tableConsultaCpf.getModel();

		labelInsiraCpf = new JLabel("");
		labelInsiraCpf.setForeground(Color.RED);
		labelInsiraCpf.setFont(new Font("Dialog", Font.BOLD, 16));
		labelInsiraCpf.setBounds(89, 40, 172, 15);
		panelConsultaCpf.add(labelInsiraCpf);

		tnLimparCpf = new JButton("Limpar");
		tnLimparCpf.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				textConsultaCpf.setText("");
				labelInsiraCpf.setText("");
			}
		});
		tnLimparCpf.setBounds(249, 53, 117, 25);
		panelConsultaCpf.add(tnLimparCpf);

	}

	public JTextField getTextConsultaNome() {
		return textConsultaNome;
	}

	public void setLabelInsiraTexto(String text) {
		this.labelInsiraTexto.setText(text);
	}
	

	public ArrayList<Funcionario> getListaFuncionario() {
		return listaFuncionario;
	}

	public void setListaFuncionario(ArrayList<Funcionario> listaFuncionario) {
		this.listaFuncionario = listaFuncionario;
	}
	
	
	public JPanel getPanelBuscar() {
		return panelBuscar;
	}

	//retorna funcionario que foi selecionado na table 
	public Funcionario pegaFuncionario() {

		try {
			int row = tableConsultaNome.getSelectedRow();

			Funcionario funcionario = getListaFuncionario().get(row);
			
			//panelBuscar.setVisible(false);
			
			return funcionario;
			
		} catch (Exception ex) {
			JOptionPane.showMessageDialog(PanelFuncionarioBuscar.this,
					"Por Favor, Selecione um Funcionário", "Sem Funcionário",
					JOptionPane.INFORMATION_MESSAGE);
		}
		return null;
	}

	private class BuscaFuncionarioBuscaHandler implements ActionListener {

		private int tamanho = 0;

		@Override
		public void actionPerformed(ActionEvent e) {
			String nome = null;
			String cpf = null;
			String cargo = null;

			for (int i = 0; i < tamanho; i++) {
				tabelaCpf.setValueAt("", i, 0);
				tabelaCpf.setValueAt("", i, 1);
				tabelaCpf.setValueAt("", i, 2);
			}

			if (textConsultaCpf.getText().equals("")) {
				labelInsiraCpf.setText("Insira o CPF!");
			} else {
				labelInsiraCpf.setText("");
				try {

					// preenchimento da tabela
					listaFuncionario = (ArrayList<Funcionario>) RepositorioFuncionario
							.getInstanceRepositorioFuncionario().buscarCPF(
									textConsultaCpf.getText());

					tamanho = listaFuncionario.size();

					for (int i = 0; i < listaFuncionario.size(); i++) {

						tabelaCpf.setValueAt(listaFuncionario.get(i)
								.getNomeFuncionario(), i, 0);
						tabelaCpf.setValueAt(listaFuncionario.get(i)
								.getCpfFuncionario(), i, 1);
						tabelaCpf.setValueAt(listaFuncionario.get(i)
								.getCargoFuncionario(), i, 2);
					}
				} catch (Exception exception) {
					JOptionPane.showMessageDialog(PanelFuncionarioBuscar.this,
							"Usuário não Encontrado!",
							"usuário não Encontrado!",
							JOptionPane.INFORMATION_MESSAGE);
				}

			}

			// tabela = (DefaultTableModel) tableConsultaNome.getModel();

		}
	}

	private class BuscaFuncionarioHandler implements ActionListener {

		private int tamanho = 0;

		@Override
		public void actionPerformed(ActionEvent e) {
			String nome = null;
			String cpf = null;
			String cargo = null;

			for (int i = 0; i < tamanho; i++) {
				tabela.setValueAt("", i, 0);
				tabela.setValueAt("", i, 1);
				tabela.setValueAt("", i, 2);
			}

			if (textConsultaNome.getText().equals("")) {
				setLabelInsiraTexto("Insira um Nome!");
			} else {
				setLabelInsiraTexto("");
				try {

					// preenchimento da tabela
					listaFuncionario = (ArrayList<Funcionario>) RepositorioFuncionario
							.getInstanceRepositorioFuncionario().buscarNome(
									textConsultaNome.getText());

					tamanho = listaFuncionario.size();

					for (int i = 0; i < listaFuncionario.size(); i++) {

						tabela.setValueAt(listaFuncionario.get(i)
								.getNomeFuncionario(), i, 0);
						tabela.setValueAt(listaFuncionario.get(i)
								.getCpfFuncionario(), i, 1);
						tabela.setValueAt(listaFuncionario.get(i)
								.getCargoFuncionario(), i, 2);
					}
				} catch (Exception exception) {
					JOptionPane.showMessageDialog(PanelFuncionarioBuscar.this,
							"Usuário não Encontrado!",
							"usuário não Encontrado!",
							JOptionPane.INFORMATION_MESSAGE);
				}

			}

			// tabela = (DefaultTableModel) tableConsultaNome.getModel();

		}
	}

}
